home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Database Designers / Rational Rose 2000 / Rational Setup.EXE / common / lib / MSWin32-x86 / CORE / regexp.h < prev    next >
Encoding:
C/C++ Source or Header  |  1999-01-26  |  3.3 KB  |  104 lines

  1. /*    regexp.h
  2.  */
  3.  
  4. /*
  5.  * Definitions etc. for regexp(3) routines.
  6.  *
  7.  * Caveat:  this is V8 regexp(3) [actually, a reimplementation thereof],
  8.  * not the System V one.
  9.  */
  10.  
  11.  
  12. struct regnode {
  13.     U8    flags;
  14.     U8  type;
  15.     U16 next_off;
  16. };
  17.  
  18. typedef struct regnode regnode;
  19.  
  20. struct reg_data {
  21.     U32 count;
  22.     U8 *what;
  23.     void* data[1];
  24. };
  25.  
  26. struct reg_substr_datum {
  27.     I32 min_offset;
  28.     I32 max_offset;
  29.     SV *substr;
  30. };
  31.  
  32. struct reg_substr_data {
  33.     struct reg_substr_datum data[3];    /* Actual array */
  34. };
  35.  
  36. typedef struct regexp {
  37.     I32 refcnt;
  38.     char **startp;
  39.     char **endp;
  40.     regnode *regstclass;
  41.     I32 minlen;        /* mininum possible length of $& */
  42.     I32 prelen;        /* length of precomp */
  43.     U32 nparens;        /* number of parentheses */
  44.     U32 lastparen;        /* last paren matched */
  45.     char *precomp;        /* pre-compilation regular expression */
  46.     char *subbase;        /* saved string so \digit works forever */
  47.     char *subbeg;        /* same, but not responsible for allocation */
  48.     char *subend;        /* end of subbase */
  49.     U16 naughty;        /* how exponential is this pattern? */
  50.     U16 reganch;        /* Internal use only +
  51.                    Tainted information used by regexec? */
  52. #if 0
  53.         SV *anchored_substr;    /* Substring at fixed position wrt start. */
  54.     I32 anchored_offset;    /* Position of it. */
  55.         SV *float_substr;    /* Substring at variable position wrt start. */
  56.     I32 float_min_offset;    /* Minimal position of it. */
  57.     I32 float_max_offset;    /* Maximal position of it. */
  58.         SV *check_substr;    /* Substring to check before matching. */
  59.         I32 check_offset_min;    /* Offset of the above. */
  60.         I32 check_offset_max;    /* Offset of the above. */
  61. #else
  62.         struct reg_substr_data *substrs;
  63. #endif
  64.         struct reg_data *data;    /* Additional data. */
  65.     regnode program[1];    /* Unwarranted chumminess with compiler. */
  66. } regexp;
  67.  
  68. #define anchored_substr substrs->data[0].substr
  69. #define anchored_offset substrs->data[0].min_offset
  70. #define float_substr substrs->data[1].substr
  71. #define float_min_offset substrs->data[1].min_offset
  72. #define float_max_offset substrs->data[1].max_offset
  73. #define check_substr substrs->data[2].substr
  74. #define check_offset_min substrs->data[2].min_offset
  75. #define check_offset_max substrs->data[2].max_offset
  76.  
  77. #define ROPT_ANCH        (ROPT_ANCH_BOL|ROPT_ANCH_MBOL|ROPT_ANCH_GPOS)
  78. #define ROPT_ANCH_SINGLE    (ROPT_ANCH_BOL|ROPT_ANCH_GPOS)
  79. #define ROPT_ANCH_BOL         1
  80. #define ROPT_ANCH_MBOL         2
  81. #define ROPT_ANCH_GPOS         4
  82. #define ROPT_SKIP        8
  83. #define ROPT_IMPLICIT        0x10    /* Converted .* to ^.* */
  84. #define ROPT_NOSCAN        0x20    /* Check-string always at start. */
  85. #define ROPT_GPOS_SEEN        0x40
  86. #define ROPT_CHECK_ALL        0x80
  87. #define ROPT_LOOKBEHIND_SEEN    0x100
  88. #define ROPT_EVAL_SEEN        0x200
  89. #define ROPT_TAINTED_SEEN    0x400
  90. /* 0xf800 of reganch is used by PMf_COMPILETIME */
  91.  
  92. #define RX_MATCH_TAINTED(prog)    ((prog)->reganch & ROPT_TAINTED_SEEN)
  93. #define RX_MATCH_TAINTED_on(prog) ((prog)->reganch |= ROPT_TAINTED_SEEN)
  94. #define RX_MATCH_TAINTED_off(prog) ((prog)->reganch &= ~ROPT_TAINTED_SEEN)
  95. #define RX_MATCH_TAINTED_set(prog, t) ((t) \
  96.                        ? RX_MATCH_TAINTED_on(prog) \
  97.                        : RX_MATCH_TAINTED_off(prog))
  98.  
  99. #define REXEC_COPY_STR    1        /* Need to copy the string. */
  100. #define REXEC_CHECKED    2        /* check_substr already checked. */
  101.  
  102. #define ReREFCNT_inc(re) ((re && re->refcnt++), re)
  103. #define ReREFCNT_dec(re) pregfree(re)
  104.